/**************************************************************
 *            文件：     ipmsg.h
 *            描述：     存放命令字头文件
 **************************************************************/
#ifndef IPMSG_H
#define IPMSG_H
#include <time.h>
/*  IP Messenger Communication Protocol version 1.2 define  */
/*  macro  */
#define GET_MODE(command) (command & 0x000000ffUL)
#define GET_OPT(command) (command & 0xffffff00UL)
/*  header  */
#define IPMSG_VERSION 0x0001
#define IPMSG_DEFAULT_PORT 0x0979
/*  command  */
#define IPMSG_NOOPERATION 0x00000000UL
#define IPMSG_BR_ENTRY 0x00000001UL
#define IPMSG_BR_EXIT 0x00000002UL
#define IPMSG_ANSENTRY 0x00000003UL
#define IPMSG_BR_ABSENCE 0x00000004UL
#define IPMSG_BR_ISGETLIST 0x00000010UL
#define IPMSG_OKGETLIST 0x00000011UL
#define IPMSG_GETLIST 0x00000012UL
#define IPMSG_ANSLIST 0x00000013UL
#define IPMSG_BR_ISGETLIST2 0x00000018UL
#define IPMSG_SENDMSG 0x00000020UL
#define IPMSG_RECVMSG 0x00000021UL
#define IPMSG_READMSG 0x00000030UL
#define IPMSG_DELMSG 0x00000031UL
#define IPMSG_ANSREADMSG 0x00000032UL
#define IPMSG_GETINFO 0x00000040UL
#define IPMSG_SENDINFO 0x00000041UL
#define IPMSG_GETABSENCEINFO 0x00000050UL
#define IPMSG_SENDABSENCEINFO 0x00000051UL
#define IPMSG_GETFILEDATA 0x00000060UL
#define IPMSG_RELEASEFILES 0x00000061UL
#define IPMSG_GETDIRFILES 0x00000062UL
#define IPMSG_GETPUBKEY 0x00000072UL
#define IPMSG_ANSPUBKEY 0x00000073UL
/*  option for all command  */
#define IPMSG_ABSENCEOPT 0x00000100UL
#define IPMSG_SERVEROPT 0x00000200UL
#define IPMSG_DIALUPOPT 0x00010000UL
#define IPMSG_FILEATTACHOPT 0x00200000UL
#define IPMSG_ENCRYPTOPT 0x00400000UL
/*  option for send command  */
#define IPMSG_SENDCHECKOPT 0x00000100UL
#define IPMSG_SECRETOPT 0x00000200UL
#define IPMSG_BROADCASTOPT 0x00000400UL
#define IPMSG_MULTICASTOPT 0x00000800UL
#define IPMSG_NOPOPUPOPT 0x00001000UL
#define IPMSG_AUTORETOPT 0x00002000UL
#define IPMSG_RETRYOPT 0x00004000UL
#define IPMSG_PASSWORDOPT 0x00008000UL
#define IPMSG_NOLOGOPT 0x00020000UL
#define IPMSG_NEWMUTIOPT 0x00040000UL
#define IPMSG_NOADDLISTOPT		0x00080000UL
#define IPMSG_READCHECKOPT		0x00100000UL
#define IPMSG_SECRETEXOPT		(IPMSG_READCHECKOPT|IPMSG_SECRETOPT)

/* encryption flags for encrypt command */
#define IPMSG_RSA_512				0x00000001UL
#define IPMSG_RSA_1024			0x00000002UL
#define IPMSG_RSA_2048			0x00000004UL
#define IPMSG_RC2_40				0x00001000UL
#define IPMSG_RC2_128				0x00004000UL
#define IPMSG_RC2_256				0x00008000UL
#define IPMSG_BLOWFISH_128		0x00020000UL
#define IPMSG_BLOWFISH_256		0x00040000UL
#define IPMSG_SIGN_MD5			0x10000000UL

/* compatibilty for Win beta version */
#define IPMSG_RC2_40OLD	0x00000010UL		// for beta1-4 only
#define IPMSG_RC2_128OLD	0x00000040UL			// for beta1-4 only
#define IPMSG_BLOWFISH_128OLD	0x00000400UL		// for beta1-4 only
#define IPMSG_RC2_40ALL	(IPMSG_RC2_40|IPMSG_RC2_40OLD)
#define IPMSG_RC2_128ALL			(IPMSG_RC2_128|IPMSG_RC2_128OLD)
#define IPMSG_BLOWFISH_128ALL		(IPMSG_BLOWFISH_128|IPMSG_BLOWFISH_128OLD)

/* file types for fileattach command */
#define IPMSG_FILE_REGULAR		0x00000001UL
#define IPMSG_FILE_DIR				0x00000002UL
#define IPMSG_FILE_RETPARENT		0x00000003UL		// return parent directory
#define IPMSG_FILE_SYMLINK			0x00000004UL
#define IPMSG_FILE_CDEV			0x00000005UL		// for UNIX
#define IPMSG_FILE_BDEV		0x00000006UL		// for UNIX
#define IPMSG_FILE_FIFO		0x00000007UL		// for UNIX
#define IPMSG_FILE_RESFORK		0x00000010UL		// for Mac

/* file attribute options for fileattach command */
#define IPMSG_FILE_RONLYOPT		0x00000100UL
#define IPMSG_FILE_HIDDENOPT		0x00001000UL
#define IPMSG_FILE_EXHIDDENOPT	0x00002000UL	// for MacOS X
#define IPMSG_FILE_ARCHIVEOPT		0x00004000UL
#define IPMSG_FILE_SYSTEMOPT		0x00008000UL

/* extend attribute types for fileattach command */
#define IPMSG_FILE_UID				0x00000001UL
#define IPMSG_FILE_USERNAME		0x00000002UL	// uid by string
#define IPMSG_FILE_GID				0x00000003UL
#define IPMSG_FILE_GROUPNAME		0x00000004UL		// gid by string
#define IPMSG_FILE_PERM			0x00000010UL		// for UNIX
#define IPMSG_FILE_MAJORNO		0x00000011UL		// for UNIX devfile
#define IPMSG_FILE_MINORNO		0x00000012UL		// for UNIX devfile
#define IPMSG_FILE_CTIME			0x00000013UL		// for UNIX
#define IPMSG_FILE_MTIME			0x00000014UL
#define IPMSG_FILE_ATIME			0x00000015UL
#define IPMSG_FILE_CREATETIME		0x00000016UL
#define IPMSG_FILE_CREATOR		0x00000020UL		// for Mac
#define IPMSG_FILE_FILETYPE			0x00000021UL		// for Mac
#define IPMSG_FILE_FINDERINFO		0x00000022UL	// for Mac
#define IPMSG_FILE_ACL				0x00000030UL
#define IPMSG_FILE_ALIASFNAME		0x00000040UL	// alias fname
#define IPMSG_FILE_UNICODEFNAME	0x00000041UL	// UNICODE fname
#define FILELIST_SEPARATOR			'\a'
#define HOSTLIST_SEPARATOR		'\a'
#define HOSTLIST_DUMMY			"\b"
/*  end of IP Messenger Communication Protocol version 1.2 define  */

/*  IP Messenger for Windows  internal define  */
#define IPMSG_REVERSEICON		0x0100
#define IPMSG_TIMERINTERVAL		500
#define IPMSG_ENTRYMINSEC		5
#define IPMSG_GETLIST_FINISH		0
#define IPMSG_BROADCAST_TIMER	0x0101
#define IPMSG_SEND_TIMER			0x0102
#define IPMSG_LISTGET_TIMER		0x0104
#define IPMSG_LISTGETRETRY_TIMER	0x0105
#define IPMSG_ENTRY_TIMER			0x0106
#define IPMSG_DUMMY_TIMER		0x0107
#define IPMSG_RECV_TIMER			0x0108
#define IPMSG_ANS_TIMER			0x0109
#define IPMSG_NICKNAME			1
#define IPMSG_FULLNAME			2
#define IPMSG_NAMESORT			0x00000000
#define IPMSG_IPADDRSORT			0x00000001
#define IPMSG_HOSTSORT			0x00000002
#define IPMSG_NOGROUPSORTOPT	0x00000100
#define IPMSG_ICMPSORTOPT		0x00000200
#define IPMSG_NOKANJISORTOPT		0x00000400
#define IPMSG_ALLREVSORTOPT		0x00000800
#define IPMSG_GROUPREVSORTOPT	0x00001000
#define IPMSG_SUBREVSORTOPT		0x00002000
#endif